﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using iTextSharp.text.pdf;
using iTextSharp.text;
using OfficeOpenXml;
using System.IO;
using System.Web.UI;
using objetos;
using negocios;
using publico;

namespace relatorios
{
    public class REL_TB_VEICULO : REL_PDFPAGE
    {
        private const string arquivo = "veiculo.pdf";
        private const string diretorio = "~/relatorio/veiculo";

        BLL_TB_RELATORIO b_tb_relatorio = new BLL_TB_RELATORIO();
        OBJ_TB_RELATORIO o_tb_relatorio = new OBJ_TB_RELATORIO();

        public void ExportarPDF(List<OBJ_TB_VEICULO> lista)
        {
            bool erro = false;
            string path = HttpContext.Current.Server.MapPath(diretorio);
            string file = HttpContext.Current.Server.MapPath(diretorio + "/" + arquivo);

            try
            {

                foreach (OBJ_TB_RELATORIO o_tb_relatorio in b_tb_relatorio.SelecionarLista(string.Format("id_relatorio_tipo = {0}", (int)PUB_ENUM.TIPO_RELATORIO.PDF), ""))
                {
                    margem_direita = (float)o_tb_relatorio.margem_direita;
                    margem_esquerda = (float)o_tb_relatorio.margem_esquerda;
                    margem_inferior = (float)o_tb_relatorio.margem_inferior;
                    margem_superior = (float)o_tb_relatorio.margem_superior;
                    tamanho_titulo = o_tb_relatorio.tamanho_titulo;
                    tamanho_texto = o_tb_relatorio.tamanho_texto;
                    tamanho_rodape = o_tb_relatorio.tamanho_rodape;
                    tamanho_campo = o_tb_relatorio.tamanho_campo;

                }


                // VERIFICA SE EXISTE DIRETORIO SENAO CRIA UM DIRETORIO

                if (!PUB_FUNCOES.ExisteDiretorio(path))
                {
                    PUB_FUNCOES.CriarDiretorio(path);
                }

                // VERIFICA SE EXISTE UM ARQUIVO SE EXISTE DELETA
                if (PUB_FUNCOES.ExisteArquivo(file))
                {
                    if (!PUB_FUNCOES.ArquivoEstaApenasLeitura(file))
                    {
                        PUB_FUNCOES.ExcluirArquivo(file);
                    }
                    else
                    {
                        erro = true;
                    }
                }


                if (!erro)
                {

                    //create an instance of a PDF document. You may need to play with the margins to ensure the "look" is right
                    Document doc = new Document(PageSize.A4, margem_esquerda, margem_direita, margem_superior, margem_inferior);


                    PdfWriter pWriter = PdfWriter.GetInstance(doc, PUB_FUNCOES.AbrirArquivo(file, FileMode.Create));



                    // HEADER
                    PdfPTable tbHeader = new PdfPTable(1);
                    tbHeader.WidthPercentage = (100.0f);

                    // HEADER 
                    PdfPCell titulo = new PdfPCell(Titulo("Relatório Veículo", tamanho_titulo));
                    titulo.HorizontalAlignment = Element.ALIGN_CENTER;
                    titulo.Border = 0;
                    tbHeader.AddCell(titulo);


                    // AGRUPAMENTO
                    PdfPTable tbGrupo = new PdfPTable(4);
                    tbGrupo.WidthPercentage = (100.0f);
                    float[] colGrupoWidths = { 20, 30, 20, 30 };
                    tbGrupo.SetWidths(colGrupoWidths);

                    PdfPCell chColGrupo1 = new PdfPCell(Texto("Cliente", tamanho_campo));
                    PdfPCell chColGrupo2 = new PdfPCell(Texto("CNPJ/CPF", tamanho_campo));


                    // CONTEUDO ITEM
                    PdfPTable tbConteudoItem = new PdfPTable(6);
                    tbConteudoItem.WidthPercentage = (100.0f);
                    float[] colConteudoItemWidths = { 5, 20, 30, 5, 20, 20 };
                    tbConteudoItem.SetWidths(colConteudoItemWidths);
                    
                    
                    
                    // CONTEUDO
                    PdfPTable tbConteudoHeader = new PdfPTable(6);
                    tbConteudoHeader.WidthPercentage = (100.0f);
                    float[] colConteudoHeaderWidths = { 5, 20,30,5,20,20 };
                    tbConteudoHeader.SetWidths(colConteudoHeaderWidths);




                    // HEADER 
                    PdfPCell chCol1 = new PdfPCell(Texto("Id", tamanho_campo));
                    PdfPCell chCol2 = new PdfPCell(Texto("Marca", tamanho_campo));
                    PdfPCell chCol3 = new PdfPCell(Texto("Modelo", tamanho_campo));
                    PdfPCell chCol4 = new PdfPCell(Texto("Tração", tamanho_campo));
                    PdfPCell chCol5 = new PdfPCell(Texto("Cabine", tamanho_campo));
                    PdfPCell chCol6 = new PdfPCell(Texto("Placa", tamanho_campo));
                    tbConteudoHeader.AddCell(chCol1);
                    tbConteudoHeader.AddCell(chCol2);
                    tbConteudoHeader.AddCell(chCol3);
                    tbConteudoHeader.AddCell(chCol4);
                    tbConteudoHeader.AddCell(chCol5);
                    tbConteudoHeader.AddCell(chCol6);                    
                   
                    doc.Open();
                    // logo 
                    OnStartPage(pWriter, doc);

                    doc.Add(tbHeader);
                    doc.Add(QuebraLinha());



                    // LINHAS

                    int id_cadastro = 0;
                    string cnpj = string.Empty;
                    for (int i = 0; i <= lista.Count - 1; i++)
                    {

                        if (id_cadastro != lista[i].id_cadastro)
                        {
                            tbGrupo.AddCell(chColGrupo1);
                            tbGrupo.AddCell(Celula(lista[i].Tb_cadastro.nome.ToString(), tamanho_texto));
                            tbGrupo.AddCell(chColGrupo2);
                            tbGrupo.AddCell(Celula(lista[i].Tb_cadastro.cnpj_cpf.ToString(), tamanho_texto));

                            doc.Add(tbGrupo);
                            doc.Add(tbConteudoHeader);
                        }
                        
                        id_cadastro = lista[i].id_cadastro; 

                        tbConteudoItem.AddCell(Celula(lista[i].id.ToString(), tamanho_texto));
                        tbConteudoItem.AddCell(Celula(lista[i].Tb_veiculo_marca.desc_veiculo_marca.ToString(), tamanho_texto));
                        tbConteudoItem.AddCell(Celula(lista[i].Tb_veiculo_modelo.desc_veiculo_modelo.ToString(), tamanho_texto));
                        tbConteudoItem.AddCell(Celula(lista[i].Tb_veiculo_tracao.desc_veiculo_tracao.ToString(), tamanho_texto));
                        tbConteudoItem.AddCell(Celula(lista[i].Tb_veiculo_cabine.desc_veiculo_cabine.ToString(), tamanho_texto));
                        tbConteudoItem.AddCell(Celula(lista[i].placa.ToString(), tamanho_texto));

                        doc.Add(tbConteudoItem);                        
                        
                    }
                    

                    OnEndPage(pWriter, doc);

                    // contador
                    doc.Close();


                    Download(file);

                }
                else
                {

                }

            }
            catch (Exception)
            {

                throw;
            }

        }
    }
}
